using System;
using System.Collections.Generic;
using System.Text;

namespace Microformats.Interfaces
{
    public interface IField
    {
        /// <summary>
        /// A string telling the developer that name of the field.
        /// </summary>
        /// TODO:  Potentially make the set internal protected, so that only the framework can set the type.
        string Name { get; set; }

        /// <summary>
        /// A collection of all the fields that are descendants of the current field.
        /// </summary>
        List<IField> Fields { get;}

        /// <summary>
        /// A string telling the developer that human readable value that is stored in the field.
        /// </summary>
        /// TODO:  Potentially make the set internal protected, so that only the framework can set the type.
        string HumanValue { get; set; }

        /// <summary>
        /// A string telling the developer that machine readable value that is stored in the field.
        /// </summary>
        /// TODO:  Potentially make the set internal protected, so that only the framework can set the type.
        string MachineValue { get; set; }


        /// <summary>
        /// Finds an instance of a given field by name.
        /// </summary>
        /// <param name="fieldName">The name.</param>
        /// <returns></returns>
        IField FindFieldByName(string fieldName);
    }
}
